home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1998 November / Freeware November 1998.img / dist / fw_emacs.idb / usr / freeware / share / emacs / 19.34 / lisp / rot13.el.z / rot13.el
Lisp/Scheme  |  1998-10-27  |  2KB  |  68 lines

  1. ;;; rot13.el --- display a buffer in rot13.
  2.  
  3. ;; Copyright (C) 1988 Free Software Foundation, Inc.
  4.  
  5. ;; Author: Howard Gayle:
  6. ;; Maintainer: FSF
  7.  
  8. ;; This file is part of GNU Emacs.
  9.  
  10. ;; GNU Emacs is free software; you can redistribute it and/or modify
  11. ;; it under the terms of the GNU General Public License as published by
  12. ;; the Free Software Foundation; either version 2, or (at your option)
  13. ;; any later version.
  14.  
  15. ;; GNU Emacs is distributed in the hope that it will be useful,
  16. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ;; GNU General Public License for more details.
  19.  
  20. ;; You should have received a copy of the GNU General Public License
  21. ;; along with GNU Emacs; see the file COPYING.  If not, write to the
  22. ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  23. ;; Boston, MA 02111-1307, USA.
  24.  
  25. ;;; Commentary:
  26.  
  27. ;; The single entry point, `rot13-other-window', performs a Caesar cipher
  28. ;; encrypt/decrypt on the current buffer and displays the result in another 
  29. ;; window.  Rot13 encryption is sometimes used on USENET as a read-at-your-
  30. ;; own-risk wrapper for material some might consider offensive, such as
  31. ;; ethnic humor.
  32. ;;
  33. ;; Written by Howard Gayle.
  34. ;; This hack is mainly to show off the char table stuff.
  35.  
  36. ;;; Code:
  37.  
  38. (defvar rot13-display-table
  39.   (let ((table (make-display-table))
  40.     (i 0))
  41.     (while (< i 26)
  42.       (aset table (+ i ?a) (vector (+ (% (+ i 13) 26) ?a)))
  43.       (aset table (+ i ?A) (vector (+ (% (+ i 13) 26) ?A)))
  44.       (setq i (1+ i)))
  45.     table)
  46.   "Char table for rot 13 display.")
  47.  
  48. ;;;###autoload
  49. (defun rot13-other-window ()
  50.   "Display current buffer in rot 13 in another window.
  51. To terminate the rot13 display, delete that window."
  52.   (interactive)
  53.   (let ((w (display-buffer (current-buffer) t)))
  54.     (set-window-display-table w rot13-display-table)))
  55.  
  56. ;;;###autoload
  57. (defun toggle-rot13-mode ()
  58.   "Toggle the use of rot 13 encoding for the current window."
  59.   (interactive)
  60.   (if (eq (window-display-table (selected-window)) rot13-display-table)
  61.       (set-window-display-table (selected-window) nil)
  62.     (if (null (window-display-table (selected-window)))
  63.     (set-window-display-table (selected-window) rot13-display-table))))
  64.  
  65. (provide 'rot13)
  66.  
  67. ;;; rot13.el ends here
  68.